Skip to content

docs(skills): objectstack-platform factual sweep — 6 false behavioral claims corrected - #13760

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-13747-skills-sweep-platform
Aug 31, 2026
Merged

docs(skills): objectstack-platform factual sweep — 6 false behavioral claims corrected#13760
os-zhuang merged 3 commits into
mainfrom
claude/issue-13747-skills-sweep-platform

Conversation

@huangyiirene

Copy link
Copy Markdown
Collaborator

Fixes #13747
Part of #13658

Flight ④ of the published-skills factual sweep: skills/objectstack-platform/**, 8 files / 2,633 lines, every behavioral claim verified against the implementing code — never against another document.

Landing sites — 6 distinct facts, 8 sites

# 落点 before after how it was settled
1 rules/service-registry.md core-fallback table, job row 'job' → core → auto-inject createMemoryJob() if missing 'job' → core → NO fallback — warns; getService throws if missing Executed: ObjectKernel bootstrapped with only a data provider, getService('job') threw [Kernel] Service 'job' not found while cache/metadata/queue/i18n all resolved in the same kernel. CORE_FALLBACK_FACTORIES printed from the built artifact as metadata,cache,queue,i18n. packages/core/src/fallbacks/index.ts states the omission is deliberate (maintainer ruling 2026-08-22): a fallback must not fake capability, and every consumer's documented no-job-service path has to stay reachable.
2 same file, auth row no fallback factory — degraded-capability warning if missing NO fallback — warns; getService throws if missing Same run: getService('auth') threw identically. The row was true but understated the consequence; job and auth now read alike because they behave alike.
3 same file, section headline + criticality table "auto-injects in-memory fallbacks for core-criticality services" / "Auto-injected in-memory fallback if no plugin provides it" qualified with "that has one" / "where one exists, else warn" The same falsehood had three landing sites in one file; ObjectKernel.preInjectCoreFallbacks() and validateSystemRequirements() both branch on CORE_FALLBACK_FACTORIES[name] being present.
4 same file, factory list lists createMemoryJob among "the fallbacks" dropped from the list; "job/auth have none" createMemoryJob is still exported (for embedders who want a manual-trigger registry) but is not a fallback. Export presence confirmed by import in the same probe.
5 SKILL.md defineStack() top-level key enumeration 39 keys, no server 40 keys, server added Parsed ObjectStackDefinitionSchema's real shape: 43 keys. All 39 documented keys are real (zero phantoms). defineStack({ server: { trustProxy: true } }) parses green, while the paragraph directly below tells the reader an undeclared top-level key makes the stack fail to load — so the omission actively taught that a live v17 key is refused.
6 SKILL.md object naming object-level namespace field "is deprecated and ignored by the runtime" "is retired (ADR-0129 D3) and refused at load" Executed: defineStack with objects: [{ name, label, namespace: 'crm', fields }] throwsUnrecognized key(s) on this object: 'namespace' with the ADR-0129 D3 prescription. "Ignored" says the stack loads; it does not. This also contradicted SKILL.md's own "Refused — … each objects[] entry (ObjectSchema) … The parse throws" thirty lines earlier.
7 SKILL.md ObjectKernel logger config // 'debug' | 'info' | 'warn' | 'error' | 'fatal' // debug|info|warn|error|fatal|silent LogLevel in packages/spec/src/system/logging.zod.ts is a 6-member enum; LEVEL_ORDER in packages/core/src/logger.ts carries silent: 5. The skill's own examples use level: 'silent' eight times — it was contradicting itself.
8 SKILL.md + rules/plugin-lifecycle.md Plugin.type comment SKILL.md listed 5 of 8 values; the rules file listed 7 of 8 both now standard|ui|driver|server|app|theme|agent|objectql 'standard' + CORE_PLUGIN_TYPES (packages/spec/src/kernel/plugin.zod.ts) = 8. objectql is not decorative — ObjectQLPlugin declares type = 'objectql'. A cross-file contradiction inside the package, settled against the schema rather than against either document.

Also corrected in the same stroke, same class: the "Complete Working Example" package.json pinned ^16.0.0-rc.1 on six deps and claimed to mirror the blank template. The real template (packages/create-objectstack/src/templates/blank/package.json) pins ^17.0.0 and ships a different dependency set (three connector packages, no driver-memory) — and the skill's own frontmatter already declares 17.x. Versions corrected; the false "mirrors" claim removed rather than papered over.

Budget

Net line delta across the package: 0 (2,633 → 2,633). Net tokens: −24, from the ratchet's own verdict lines — SKILL.md −18, rules/plugin-lifecycle.md −4, rules/service-registry.md −2. No ceiling raised. Every remaining file was already sitting at zero headroom, so every edit was made byte-shrinking in place.

Verification

Gate families derived from the real diff, not recalled — node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands on the merged tree (13 families). Union re-run at the final commit f6c81ba5:

EXIT=0  node scripts/check-ci-filter-parity.mjs
EXIT=0  node scripts/check-cross-package-test-inputs.mjs
EXIT=0  node scripts/check-shard-attestation.mjs
EXIT=0  node scripts/check-skills-token-ratchet.mjs
EXIT=3  node scripts/check-test-completeness.mjs      <- PREREQUISITE NOT MET, NOT MEASURED
EXIT=0  pnpm --filter @objectstack/lint run check:doc-formula-expressions
EXIT=0  pnpm check:agent-test-spelling
EXIT=0  pnpm check:cross-package-test-inputs
EXIT=0  pnpm check:doc-authoring
EXIT=0  pnpm check:pm-governed-merges
EXIT=0  pnpm check:role-word
EXIT=0  pnpm check:skill-compatibility
EXIT=0  pnpm check:skill-frame-sync

check-test-completeness grades a saved turbo run test log and was handed none; it prints PREREQUISITE NOT MET and exits 3 before parsing a line. Recorded as NOT MEASURED, per its own instruction — not a red.

Two more run because the diff visibly implicates them even though the path derivation does not name them:

EXIT=0  pnpm --filter @objectstack/spec run check:skill-examples   (260 marked examples, 3 surfaces)
EXIT=0  pnpm --filter @objectstack/spec run check:skill-refs       (9 generated files in sync)

check:skill-examples population for this package is NOT emptySKILL.md carries two os:check fences (the defineStack minimal example and task.object.ts). Both type-check.

check:doc-authoring caught a defect I introduced: the first draft of the job row cited an internal issue id, which skills/** forbids because the catalog ships into customer context windows where a tracker id resolves to nothing. Fixed in f6c81ba5 — the teaching kept, the citation dropped.

No changeset: the diff publishes nothing from any package. skip-changeset applied, matching the precedent this branch merged up to — flight ③'s PR #13740 landed five skills/objectstack-query/** files with no changeset.

needs:contract-review attached at creation: these corrections make falsifiable operator/contract semantic claims, the CONTENT limb of clause ②. Not self-cleared.

Governed posture

Published skills/** — this PR stays draft for human merge. .md content goes to maintainer review.


Generated by Claude Code

claude added 3 commits August 31, 2026 09:48
Published-skills factual sweep, flight 4 of program #13658. Every
correction is settled against the implementing code, not against another
document, and each is byte-neutral-or-shrinking under the token ratchet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EnE7G31tqbxN1rqpQmzurT
check:doc-authoring red: skills/** ships to customer projects, where an
internal tracker id resolves to nothing. Keep the teaching, drop the
citation — the row now reads exactly like its 'auth' sibling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EnE7G31tqbxN1rqpQmzurT

Copy link
Copy Markdown
Collaborator Author

Contract review — PASS at head f6c81ba5

Applicability: clause-② CONTENT limb (批 #12 on #13588) — falsifiable operator/contract semantic claims in published skills/**. The carrier was attached by the PR creator in the same stroke the PR existed, as ruled — the discipline's first clean same-stroke attach in this lane, noted.

Reviewer qualification, machine-read this sitting: get_sessionexternal_metadata.last_served_model = claude-fable-5 = CONTRACT_REVIEW_TIER. Reviewing seat is the dispatching seat, permitted per the 2026-08-21 relaxation; the object under review is the opus implementer's contract increment.

Review: full report + diff summary read; five anchors independently re-measured on origin/main this hour, all corroborating —

  • packages/core/src/fallbacks/fallbacks.test.ts:16 pins CORE_FALLBACK_FACTORIES to exactly ['metadata','cache','queue','i18n'] with "job deliberately absent (plugin-reports: the documented setInterval dispatcher fallback is unreachable on ObjectKernel, and the job fallback it takes instead never fires #10746)" and the 2026-08-22 maintainer ruling quoted — the four-site "job auto-filled" claim was false, correction right;
  • packages/spec/src/data/object.zod.ts:1482: "namespace was retired (ADR-0129 D3)" with the REJECTS test at object.test.ts:1575 — refused at parse, not "deprecated and ignored";
  • packages/spec/src/stack.zod.ts:474: server: StackServerConfigSchema.optional() — the live v17 key the enumeration omitted;
  • CORE_PLUGIN_TYPES single-sourced at packages/spec/src/kernel/plugin.zod.ts:89 — the right settle target for the 5-vs-7 cross-file contradiction;
  • packages/spec/src/system/logging.zod.ts:32: 'silent' is a LogLevel member (and core's own tests use it).

Direction: five of six corrections un-hide shipped capability or surface a hard failure (deader-than-real); the sixth pins the example to the real template. Budget: net lines 0, net tokens −24, zero ceilings raised, every file under ceiling by the ratchet's own verdict lines. The check:doc-authoring catch-and-fix (an internal issue-id briefly introduced into published text, caught by the gate, removed) is the gate farm working — no residue at final head.

needs:contract-review cleared on this PR in this stroke (card #13747 never carried the second copy — a dev-side carrier deviation recorded on the ACCEPT, moot at clear time). Governed .md content: this PR remains DRAFT for the maintainer's merge (os-zhuang / hotlong requested); the review chain never enqueues a governed surface.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills-sweep ④: objectstack-platform (2,633 lines, 8 files) — behavioral-claim verification, content-class execution-first

3 participants